﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Resources;
using System.Runtime.Serialization;

namespace KPIS.GERP.Models.SYS
{
    [DataContract]
    public static class RecordStatus
    {
        static ResourceManager resourceMgr = ResourceManager.CreateFileBasedResourceManager("RecordStatusResource", "/Resources", null);

        //[EnumMember]
        public enum EnumRecordStatus
        {
            A, C, D, P, R, U, W
        }

        /// <summary>
        /// ได้รับอนุมัติแล้ว
        /// </summary>
        [DataMember]
        public static string ApprovedStatus { get { return "A"; } }

        /// <summary>
        /// ยกเลิกแล้ว
        /// </summary>
        [DataMember]
        public static string CanceledStatus { get { return "C"; } }

        /// <summary>
        /// ลบแล้ว
        /// </summary>
        [DataMember]
        public static string DeletedStatus { get { return "D"; } }

        /// <summary>
        /// อยู่ระหว่างการพิจารณา
        /// </summary>
        [DataMember]
        public static string ProcessStatus { get { return "P"; } }

        /// <summary>
        /// ส่งกลับไปแก้ไขแล้ว
        /// </summary>
        [DataMember]
        public static string ReturnedStatus { get { return "R"; } }

        /// <summary>
        /// ใช้งานอยู่ (ใช้กับ master)
        /// </summary>
        [DataMember]
        public static string UsedStatus { get { return "U"; } }

        /// <summary>
        /// ยังไม่ส่งอนุมัติ (ใช้กับ transection)
        /// </summary>
        [DataMember]
        public static string WaitStatus { get { return "W"; } }

        /// <summary>
        /// ไม่ผ่านการอนุมัติ (ใช้กับงานอนุมัติ)
        /// </summary>
        [DataMember]
        public static string RejectStatus { get { return "J"; } }

        public static string RecordStatusName(string strRecordStatus)
        {
            // Way #1, use reflection to retrieve from property of object resource
            Type type = typeof(Resources.RecordStatusResource);
            var props = type.GetProperties();
            foreach (var p in props)
            {
                if (p.Name == strRecordStatus)
                    return p.GetValue(null, null) as string; 
            }
            return strRecordStatus; // return default if not found

            // Way #2, use path, problem when use in mvc
            //return resourceMgr.GetString(strRecordStatus);
            //string strResault = "";
            //switch (strRecordStatus)
            //{
            //    case "A":
            //        strResault = "อนุมัติแล้ว";
            //        break;
            //    case "C":
            //        strResault = "ยกเลิกแล้ว";
            //        break;
            //    case "D":
            //        strResault = "ลบแล้ว";
            //        break;
            //    case "P":
            //        strResault = "รออนุมัติ";
            //        break;
            //    case "R":
            //        strResault = "ส่งกลับ";
            //        break;
            //    case "U":
            //        strResault = "ใช้งานอยู่";
            //        break;
            //    case "W":
            //        strResault = "ดำเนินการอยู่";
            //        break;
            //    default:
            //        strResault = "ไม่มีสถานะ";
            //        break;
            //}

            //return strResault;
        }
    }
}
